package com.hxk.dao;

import java.util.List;

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;

import com.hxk.pojo.Users;
/**
 * 使用spring data jpa顶层接口Repository实现业务
 * Repository 提供了两种查询方式的支持
 * 1、基于方法名称命名规则查询
 * 2、基于@Query 注解查询
 * @author Cactus
 */
public interface UserRepositoryDao extends Repository<Users, Integer> {

	/**基于方法名称命名规则查询
	 * 注：如findByUserNameIs中UserName必须要和Users实体对象属性一致
	 */
	List<Users> findByUserNameIs(String userName);
	
	List<Users> findByUserNameLike(String userName);
	
	List<Users> findByUserNameAndUserAgeGreaterThanEqual(String userName, Integer userAge);
	
	/**
	 * 基于@Query 注解查询
	 * 注：from Users where userName 中的 Users 必须为实体对象 userName 必须为实现对象Users中的属性
	 */
	@Query("from Users where userName = ?")
	List<Users> queryUserByNameUseJPQL(String userName);
	
	@Query("from Users where userName like ?")
	List<Users> queryUserByLikeNameUseJPQL(String userName);
	
	@Query("from Users where userName = ? and userAge = ?")
	List<Users> queryUserByNameAndAgeJPQL(String userName, Integer userAge);
	
	/**
	 * 基于@Query 注解查询使用sql语句查询
	 * 注：select * from t_users where userName = ?
	 * 中的t_users必须为真实的表，userName为表的字段
	 */
	@Query(value="select * from t_user where userName = ?",nativeQuery=true)
	List<Users> queryUserByNameUseSQL(String userName);
	
	@Query(value="select * from t_user where userName like ?", nativeQuery=true)
	List<Users> queryUserByLikeNameUseSQL(String userName);
	
	@Query(value="select * from t_user where userName = ? and userAge = ?", nativeQuery=true)
	List<Users> queryUserByNameAndAgeSQL(String userName, Integer userAge);
	
	//基于@Query 注解实现更新操作
	@Query("update Users set userAge = ? where userId = ?")
	@Modifying//此注解用于标识该语句为更新语句
	void updateUserAgeById(Integer userAge,Integer userId);
	
}
